﻿#ifndef TEM_H
#define TEM_H

#endif // TEM_H

//读块号定义
#define USART_CMD_READ_BLOCK1               0x01
#define USART_CMD_READ_BLOCK2               0x02
#define USART_CMD_READ_BLOCK3               0x03
#define USART_CMD_READ_BLOCK4               0x04
#define USART_CMD_READ_BLOCK5               0x05
#define USART_CMD_READ_BLOCK6               0x05
#define USART_CMD_READ_BLOCK7               0x07
#define USART_CMD_READ_BLOCK8               0x08
#define USART_CMD_READ_BLOCK9               0x09
#define USART_CMD_READ_BLOCK10              0x0A
#define USART_CMD_READ_BLOCK11              0x0B
#define USART_CMD_READ_BLOCK12              0x0C
#define USART_CMD_READ_BLOCK13              0x0D
#define USART_CMD_READ_BLOCK14              0x0E
#define USART_CMD_READ_BLOCK15              0x0F
#define USART_CMD_READ_BLOCK16              0x10
#define USART_CMD_READ_MOST_CTRL            0x11
#define USART_CMD_READ_EDIT_BAT_CAP         0x12
#define USART_CMD_READ_EDIT_BAT_BALANCE     0x13
#define USART_CMD_READ_TIME                 0x15

#define w_Word_u unsigned short

#define INFO_BLOCK1_BYTE_NUM (sizeof(InfoBlock1_t))
typedef struct InfoBlock1_t_{
    uint16_t arry_vol_voltage[32]; // 单节电池电压，单位，mV
    w_Word_u TsValuel1;   //NTC1温度  单位：0.1度
    w_Word_u TsValuel2;   //NTC2温度  单位：0.1度
    w_Word_u TsValuel3;   //NTC3温度  单位：0.1度
    w_Word_u TsValuel4;   //NTC4温度  单位：0.1度
    w_Word_u TsValuel5;   //NTC5温度  单位：0.1度
    w_Word_u TsValuel6;   //NTC6温度  单位：0.1度
    w_Word_u TsValuel7;   //NTC7温度  单位：0.1度
    w_Word_u TsValuel8;   //芯片内部温度  单位：0.1度
    w_Word_u IntvalVal;   //
    uint16_t bat_balance_status_low16bit;  // 电池开启平衡状态 bit0-bit14;1表示平衡开启   0 表示平衡关闭
    uint16_t bat_balance_status_hight16bit;
} InfoBlock1_t;




#define INFO_BLOCK2_BYTE_NUM (sizeof(InfoBlock2_t))
typedef struct InfoBlock2_t_{
    d_Word_u BatVolTotal;                          //电池总电压，单位:mv
    d_Word_u BatVolumeTotal;         // 标称容量，单位:maH
    d_Word_u Batvolumecurrent;       //剩余容量，单位:maH
    d_Word_u BatcurrentTotal;        //实时电流，单位:mA
    w_Word_u_BatVolAvg;              // 电池平均电压，单位:mV
    w_Word_u_BatVolMax;              // 最高电压，单位:mV
    w_Word_u_BatVolMin;              // 最低电压，单位:mv
    w_Word_u_BatvolDiff;             // 电压差，单位:mV
    w_word_u chgcycleTimes;          //充电循环次数
    uint8_t BatVolumePrecent;        // 电池S0C
    d_Word_u Bat_full_chg_cap;      //满充容量  单位:maH
} InfoBlock2_t;




#define INFO_BLOCK3_BYTE_NUM (sizeof(InfoBlock3_t))
typedef struct InfoBlock3_t_{
    uint8_t ChgMossts;    // 充电开关状态  1：充电MOS开  0：充电MOS关
    uint8_t DischgMossts;  // 放电开关状态  1：放电MOS开  0：放电MOS关
    uint8_t simpBodyOvProtect; // 单体积过压保护标志 1：发生保护  0：未发生
    uint8_t simpBodyUvProtect;  // 单体积欠压保护标志 1：发生保护  0：未发生
    uint8_t PackovProtect;      // Pack过压保护标志 1：发生保护  0：未发生
    uint8_t PackUvProtect;      // Pack欠压保护标志 1：发生保护  0：未发生
    uint8_t chgoverTempProtect; // 充电过温保护标志 1：发生保护  0：未发生
    uint8_t chgunderTempProtect; // 充电低温保护标志 1：发生保护  0：未发生
    uint8_t DischgoverTempProtect; // 放电过温保护标志 1：发生保护  0：未发生
    uint8_t DischgunderTempProtect; // 放电低温保护标志 1：发生保护  0：未发生
    uint8_t chgOvercurrprotect;    // 充电过流保护标志 1：发生保护  0：未发生
    uint8_t DischgovercurrProtect; // 放电过流保护标志 1：发生保护  0：未发生
    uint8_t CircuitshortProtect;   // 短路保护标志 1：发生保护  0：未发生
    uint8_t ChipErrorSts;        // 芯片错误标志 1：发生保护  0：未发生
    uint8_t ProtectBoardLocksts;  // 保护版锁定标志 1：发生保护  0：未发生
    uint8_t ChgTimeOutLockSts;   // 充电超时锁定标志 1：发生保护  0：未发生
    uint8_t DisChgTimeOutLockSts; // 放电定时锁定标志 1：发生保护  0：未发生
} InfoBlock3_t;



#define INFO_BLOCK4_BYTE_NUM (sizeof(InfoBlock4_t))
typedef struct InfoBlock4_t_{
    uint16_t softVersion;    // 软件版本
    uint8_t FactoryDate[8];  // 出厂日期
    uint8_t Hardversion[32]; // 硬件版本
} InfoBlock4_t;


#define INFO_BLOCK5_BYTE_NUM (sizeof(InfoBlock5_t))
typedef struct InfoBlock5_t_{
    w_Word_u SimpBodyBatOvVol;         //单体过压    单位:mw
    w_Word_u SimpBodyBatOvReleaseVol;   //单体过压释放电压 单位mV

    w_Word_u SimpBodyBatUnderVol;         //单体欠压  单位:mw
    w_Word_u SimpBodyBatUnderReleaseVol;  //单体欠压释放电压   单位:mv

    d_word_u TotalBatovVol; // 整组过压  单位:mV
    d_word_u TotalBatovReleaseVol; // 整组过压释放电压   单位:mV

    d_word_u TotalBatUnderVol; // 整组欠压  单位:mV
    d_word_u TotalBatunderReleaseVol; // 整组欠压释放电压    单位:mV

    d_word_u chgCurrentOvVal;   //  充电过流  单位：mA
    d_word_u pischgcurrentOvVal; // 放电过流 单位：mA

    uint8 SimpBodyBatOvDelayTime;  //单体过压延时  单位:S
    uint8 SimpBodyBatUnderDelayTime; //单体欠压延时  单位:S
    uint8_totalBatOvDelayTime;   // 整组过压延时 单位:S
    uint8_totalBatUnderDelayTime; // 整组欠压延时 单位:S

    uint8_t ChgHighTempNum;  //充电高温单位:度
    uint8_t ChgHighReleaseTempNum; //充电高温释放温度单位:度
    uint8_t ChgHighTempDelayTime; //充电高温温度延时单位: S

    uint8_t ChgLowTempNum;  // 充电低温单位:度
    uint8_t ChgLowReleaseTempNum; // 充电低温释放温度单位:度
    uint8_t CheLowTempDelayTime;  // 充电低温温度延时单位:S

    uint8_t DischgHighTempNum;    // 放电高温单位:度
    uint8_t DischgHighReleaseTempNum; // 放电高温释放温度单位:度
    uint8_t DischgHighTempDelayTime; //放电高温温度延时单位:s

    uint8_t DischgLowTempNum; //放电低温单位:度
    uint8_t DischgLowReleaseTempNum;  // 放电低温释放温度单位: 度
    uint8_t DischgLowTempDelayTime; // 放电低温温度延时单位:5

    uint8_t ChgCurrentOvReleaseTime;   //充电过流释放时间  单位：S
    uint8_t ChgCurrentOvDelayTime;     //充电过流延时时间  单位：S

    uint8_t DischgCurrenOvReleaseTime;  //放电过流释放时间  单位：S
    uint8_t DischgCurrentOvDelayTime;  //放电过流延时时间 单位：S


} InfoBlock5_t;


#define INFO_BLOCK6_BYTE_NUM (sizeof(InfoBlock6_t))
typedef struct InfoBlock6_t_{
    uint8_t SwitchFunctionFlag;  // 开关功能
    uint8_t LoadDetFlag;       // 负载检验
    uint8_t BalanceFunctionFlag;  // 均衡功能
    uint8_t ChgBalanceFlag;  // 充电均衡
    uint8_t LedEnFlag;      //LED_EN
    uint8_t LedNumFlag;   //LED_NUM
    uint8_t RtcFlag;      //RTC
    uint8_t NoLimitFlag;  //NO_LIMIT
    uint8_t ChgEnFlag;    //CHG_EN

    uint8_t Ntc1Flag;   // 温度1使能
    uint8_t Ntc2Flag;   // 温度2使能
    uint8_t Ntc3Flag;   // 温度3使能
    uint8_t Ntc4Flag;   // 温度4使能
    uint8_t Ntc5Flag;   // 温度5使能
    uint8_t Ntc6Flag;   // 温度6使能
    uint8_t Ntc7Flag;   // 温度7使能
    uint8_t Ntc8Flag;   // 温度8使能

} InfoBlock6_t;



#define INFO_BLOCK7_BYTE_NUM (sizeof(InfoBlock7_t))
typedef struct InfoBlock7_t_{
    w_word_u HardsimpBodyovvol;    // 硬件单体过压，单位:mV
    w_Word_u HardsimpBodyunderVol; // 硬件单体欠压单位:mv
    w_Word_u BalanceopenVol;    // 均衡开启电单位:mv
    uint8_t currov_circshortProtectDoubleFlag;  // 过流及短路保护值是否翻倍
    uint8_t Dischgcurrentovval2;   // 硬件放电过流2
    uint8_t pischgcurrentovDelayTime2; //硬件过流2延时

    uint8_t circuitshortProtectval;   // 短路保护
    uint8_t circuitshortProtectDelayTime; //硬件短路延时

    uint8_t HardsimpBodyovDelayTime; //硬件单体过压延时:s
    uint8_t HardsimpBodyunderDelayTime; // 硬件单体欠压延时
    uint8_t CircuitshortReleaseDelayTime; // 短路释放延时
    uint8_t BalanceVolPrecision;  //均衡开启压差
} InfoBlock7_t;

#define INFO_BLOCK8_BYTE_NUM (sizeof(InfoBlock8_t))
typedef struct InfoBlock8_t_{
    w_Word_u chg DischgcycleTime; // 循环次数
    w_word_u SerialNumber;   // 序列

    uint16_t DetResistanceval; // 检测电阻
    uint8_t  BatNumber;   //电池串数
    uint8_t ManufacturerName[32];// 制造商 ，ASCIII
    uint8_t DeviceModel[32]; //设备型号,ASCIII
    uint8_t FactoryDate[8]; // 生产日期,ASCII
    uint8_t serialcode[16]; // 条形，ASCII
    uint8_t t_cell_type[32]; // 电芯型号。ASCII
    uint8_t reserver1;
    uint8_t reserver2;
    uint8_t reserver3;
    uint8_t reserver4;
    uint8_t reserver5;
} InfoBlock8_t;


#define INFO_BLOCK9_BYTE_NUM (sizeof(InfoBlock9_t))
typedef struct InfoBlock9_t_{
    w_Word_u circuitshortTime;   // 短路次数
    w_Word_u chgHighTempTime;    //  充电高温次数
    w_Word_u chgcurrentovTime;   // 充电过流次数
    w_Word_u ChgLowTempTime;     // 充电低温次数
    w_Word_u DischgcurrentovTime; // 放电过流次数
    w_Word_u DischgHighTempTime;  // 放电高温次数
    w_Word_u DischgLowTempTime;  // 放电低温次数

    w_Word_u simpBodyovvolTime;   //单体过压次数
    w_Word_u TotalovvolTime;     //整体过压次数
    w_Word_u simpBodyunderVolTime; //单体欠压次数
    w_Word_u TotalunderVolTime;  // 整体欠压次数
} InfoBlock9_t;


#define INFO_BLOCK10_BYTE_NUM (sizeof(InfoBlock10_t))
typedef struct InfoBlock10_t_{
    uint32_t BatTotalVolume;// 标称容量
    uint32_t Batcyclevolume; // 循环容量
    w_Word_u simpBatFullVol; // 单体充满电压
    w_Word_u simpBatstopVol; //  单体截止电压
    w_Word_u BatVol80Percent; // 80%容量电压
    w_Word_u BatVol60Percent; // 60%容量电压
    w_Word_u BatVol40Percent; // 40%容量电压
    w_Word_u BatVol20Percent; // 20%容量电压
    uint8_t selfpischgPercent; // 自放电率
    uint8_t switchcontrolTime;  //开关控制时
    //uint8 t LedworkTime;uint16 t LedworkTime;// LED工作时间
    uint16_t LedWorkTime;   // LED工作时间  //8_23

} InfoBlock10_t;


#define INFO_BLOCK11_BYTE_NUM (sizeof(InfoBlock11_t))
typedef struct InfoBlock11_t_{
    w_Word_u Cell01calibrationVol;  //电池1电压校准
    w_Word_u Cell02calibrationVol;  //电池2电压校准
    w_Word_u Cell03calibrationVol;
    w_Word_u Cell04calibrationVol;
    w_Word_u Cell05calibrationVol
    w_Word_u Cell06calibrationVol;
    w_Word_u Cell07calibrationVol;
    w_Word_u Cell08calibrationVol;
    w_Word_u Cell09calibrationVol;
    w_Word_u Cell10calibrationVol;
    w_Word_u Cell11calibrationVol
    w_Word_u Cell12calibrationVol;
    w_Word_u Cell13calibrationVol;
    w_Word_u Cell14calibrationVol;
    w_Word_u Cell15calibrationVol;
    w_Word_u Cell16calibrationVol;
    w_Word_u Cell17calibrationVol;
    w_Word_u Cell18calibrationVol;
    w_Word_u Cell19calibrationVol;
    w_Word_u Cell20calibrationVol;
    w_Word_u Cell21calibrationVol;
    w_Word_u Cell22calibrationVol;
    w_Word_u Cell23calibrationVol;
    w_Word_u Cell24calibrationVol;
    w_Word_u Cell25calibrationVol;
    w_Word_u Cell26calibrationVol;
    w_Word_u Cell27calibrationVol;
    w_Word_u Cell28calibrationVol;
    w_Word_u Cell29calibrationVol;
    w_Word_u Cell30calibrationVol;
    w_Word_u Cell31calibrationVol;
    w_Word_u cell32calibrationVol;  //电池32电压校准
    uint16_t Ntc1calibrationval;
    uint16_t Ntc2calibrationval;
    uint16_t Ntc3calibrationval;
    uint16_t Ntc4calibrationval;
    uint16_t Ntc5calibrationval;
    uint16_t Ntc6calibrationval;
    uint16_t Ntc7calibrationval;
    uint16_t Ntc8calibrationval;

} InfoBlock11_t;

#define INFO_BLOCK12_BYTE_NUM (sizeof(InfoBlock12_t))
typedef struct InfoBlock12_t_{
    w_word_u RealcurrentVal; //静态电流值
} InfoBlock12_t;

#define INFO_BLOCK13_BYTE_NUM (sizeof(InfoBlock13_t))
typedef struct InfoBlock13_t_{
    w_word_u chgcalibrationcurrent;   // 充电电流校准设置
} InfoBlock13_t;


#define INFO_BLOCK14_BYTE_NUM (sizeof(InfoBlock14_t))
typedef struct InfoBlock14_t_{
    w_word_u Digchgcalibrationcurrent;   // 放电电流校准设置
} InfoBlock14_t;



